package com.fanshe;

/**
 * 静态代理举例
 *
 * 特点: 代理类和被代理类在编译期间就确定下来了。
 */

interface ClothFactory {

    void produceCloth();


}

//代理类
class ProxyClothFactory implements ClothFactory {

    private ClothFactory clothFactory;   //用被代理类对象进行实例化


    public ProxyClothFactory(ClothFactory clothFactory) {
        this.clothFactory = clothFactory;
    }


    @Override
    public void produceCloth() {
        System.out.println("代理工厂做了一些准备工作");
        clothFactory.produceCloth();

        System.out.println("代理工厂做一些后续的收尾工作");
    }
}

//被代理类
class NikeClothFactory implements ClothFactory {

    @Override
    public void produceCloth() {
        System.out.println("Nike 工厂生产一批运动服");
    }
}



public class StaticProxyTest {

    public static void main(String[] args) {

        //创建被代理类对象
        NikeClothFactory nikeClothFactory = new NikeClothFactory();

        //创建代理类对象
        ProxyClothFactory proxyClothFactory = new ProxyClothFactory(nikeClothFactory);

        proxyClothFactory.produceCloth();
    }

}
